package demo01Array; /**
 * Created with IntelliJ IDEA.
 * Description:
 * User:咭咭熊
 * Date:2021 - 09 - 02
 * Time:16:57
 */

/***
 * 1.数据类型
 * （1）基本数据类型
 * 整数类型：byte short int long
 * 浮点类型：float double
 * 字符类型：char
 * 布尔类型：boolean
 * （2）引用类型：
 * String
 * 数组；
 * 类；
 * 接口
 * 2.常量：在程序运行的额过程中，不能进行改变的量
 * （1）字面常量；
 * （2）被final修饰的变量：只能初始化1次
 * 3.类型转换
 * （1）不同数字类型之间变量赋值，表示范围更小的类型能隐式的转换成范围大的类型；
 * （2）大类型转换为小类型——需要强制类型转换，但是可能精度会发生丢失；
 * （3）使用字面值常量赋值的时候，Java会自动针对数字范围进行检查；
 *4.类型提升
 * （1）不同类型的数据混合运算，范围小的会提升为范围大的；
 * （2）对于short、byte这种小于4字节的类型，会提升成4字节的int，再进行运算；
 */
public class Test1 {
    /***
     * 4.类型提升：
     * CPU在进行运算的时候，每次会取4字节；
     * 小于4字节的时候【(byte1字节)（short2字节）】——会自动提升为int（4字节）
     * @param args
     */
    public static void main(String[] args) {
       //1字节byte 提升为4字节int
        byte b1 = 10;
        byte b2 = 20;
        byte b3 = (byte)(b1 +b2);
        System.out.println(b3);

        //4字节int提升为8字节的long
        int a1 = 10;
        long a2 = 10L;
        int a3 = (int)(a1  + a2);
        System.out.println(a3);

        short s = 10;
        //s = s +20;
        s += 20;// += 复合运算符（会自动发生类型转换）
        System.out.println(s);

    }
    /***
     * int long double 的类型转换
     * @param args
     */
    public static void main10(String[] args) {
        int a = 10;//int 4字节
        long b = 10;//long 8字节
//        a = b;
        a = (int)b;
        b = a;

        int a2 = 10;
        double d = 19.8;
//        a2 = d;
        a2 = (int)d;
        d = a2;

    }
    public static void main9(String[] args) {
        final int a;
        a = 99;
        System.out.println(a);
    }
    public static void main8(String[] args) {
        //字符串String
        String str = "Hello";
        System.out.println(str);

        int a = 10;
        //拼接——任何类型的数据和字符串用 + ： 表示进行拼接
        System.out.println(a + str);//10Hello
    }
    public static void main7(String[] args) {
        //布尔类型——JVM没有明确规定boolean占多少字节。
        boolean b = false;
        System.out.println(b);
    }
    public static void main6(String[] args) {
        //短整型short —— 2字节
        short s = 10;
        System.out.println(s);
    }
    public static void main5(String[] args) {
        //字节类型byte ——1字节
        byte b = 127;
        System.out.println(b);
    }
    public static void main4(String[] args) {
        /**
         * 字符类型 char——2字节
         * 一个汉字是2字节
         */
        char ch = 'a';
        System.out.println(ch);
        char ch2 = 97;
        System.out.println(ch2);
        char ch3 = '刘';
        System.out.println(ch3);
        char ch4 = 9971;//unicode字符集
        System.out.println(ch4);
    }
    public static void main3(String[] args) {
        /**
         * double ——双精度8字节
         * float ——单精度4字节*/
        double d = 19.8;
        System.out.println(d);
    }
    public static void main2(String[] args) {
        /**
         * long——长整型 8字节*/
        long a= 10L;
        System.out.println(a);
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
    }
    public static void main1(String[] args) {
        /***
         * int ——4字节，与多少位机器没有关系
         * 表示范围：-2^31 ——2^31
         */
        int a = 10;
        System.out.println(a);

        int b = Integer.MAX_VALUE  + 1;
        System.out.println(b);
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MAX_VALUE);
    }
}
